c#winform绘制的立方体方法,时间关系没做成控件,大家在界面上拖一个picturebox即可调用方法即可
//绘制立方体 public void drawVolume(PictureBox picbox,double sc) //sc立方体占用的体积 { mybitmap = new Bitmap(picbox.Width, picbox.Height);//设定位图大小 Graphics g = Graphics.FromImage(mybitmap);//从位图上获取画布 g.Clear(Color.White);//用背景色刷新 //pictureBox1填充为白色,便于显示图像 Rectangle rect = new Rectangle(0, 0, picbox.Width, picbox.Height); g.FillRectangle(new SolidBrush(Color.WhiteSmoke), rect); Pen pen = new Pen(Color.White, 2);//画笔 Pen penline = new Pen(Color.White, 1);//画笔 SolidBrush sb = new SolidBrush(Color.FromArgb(92,0,128));//标注画刷 int htmp = 7; /* * 下面是立方体框架 对于立方体可不画因为会覆盖 g.DrawLine(pen, 20, picbox.Height - 20, (picbox.Width - 5)/2, picbox.Height - 13);//绘制X斜下 g.DrawLine(pen, (picbox.Width - 5) / 2, picbox.Height - 13, picbox.Width - 20, picbox.Height - 20);//绘制X斜上 g.DrawLine(pen, 20, picbox.Height -20, 20, 20); g.DrawLine(pen, 20, 20, (picbox.Width - 5) / 2, 20 + htmp); //中间竖线 g.DrawLine(pen, (picbox.Width - 5) / 2, 20 + htmp, (picbox.Width - 5) / 2, picbox.Height - 20+htmp); g.DrawLine(pen, (picbox.Width - 5) / 2, 20 + htmp, picbox.Width - 20, 20); g.DrawLine(pen, picbox.Width - 20, 20, picbox.Width - 20, picbox.Height - 20); //顶斜上 g.DrawLine(pen, 20, 20, (picbox.Width - 5) / 2, 20 - htmp); //顶斜下 g.DrawLine(pen, picbox.Width - 20, 20, (picbox.Width - 5) / 2, 20 - htmp); //底斜上 g.DrawLine(pen, 20, picbox.Height - 20, (picbox.Width - 5) / 2, picbox.Height - 20+htmp); //底部斜上 //底部斜下 g.DrawLine(pen, picbox.Width - 20, picbox.Height - 20, (picbox.Width - 5) / 2, picbox.Height - 20 - htmp); g.DrawLine(pen, 20, picbox.Height - 20, (picbox.Width - 5) / 2, picbox.Height - 20 - htmp); //斜下 */ Brush top = new SolidBrush(Color.FromArgb(128, 128, 255));//顶部颜色 Brush leftdown = new SolidBrush(Color.FromArgb(150, 60, 130));//左下颜色 Brush rightdown = new SolidBrush(Color.FromArgb(192, 66, 140));//右下颜色 Brush ns = new SolidBrush(Color.FromArgb(160, 96, 160)); //内部颜色 上矩形 Brush nx = new SolidBrush(Color.FromArgb(140, 64, 122)); //内部颜色 下矩形 sc = 0.5;//占用比例 //下面是7个矩形从上至下 //顶 Point[] p = new Point[4]; p[0] = new Point(20, 20); p[1] = new Point((picbox.Width - 5) / 2, 20 - htmp); p[2] = new Point(picbox.Width - 20, 20 ); p[3] = new Point((picbox.Width - 5) / 2, 20 + htmp); g.FillPolygon(top, p); //前左上 p[0] = new Point(20, 20); p[1] = new Point((picbox.Width - 5) / 2, 20 + htmp); p[2] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc)) + htmp); p[3] = new Point(20, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); g.FillPolygon(top, p); //前左下 p[0] = new Point(20, 20 + Convert.ToInt32((picbox.Height-20-20)*(1-sc))); p[1] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))+htmp); p[2] = new Point((picbox.Width - 5) / 2, picbox.Height - 20 + htmp); p[3] = new Point(20, picbox.Height - 20); g.FillPolygon(leftdown, p); //前右侧上 p[0] = new Point((picbox.Width - 5) / 2, 20 +htmp); p[1] = new Point(picbox.Width - 20, 20); p[2] = new Point(picbox.Width - 20, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); p[3] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc)) + htmp); g.FillPolygon(top, p); //右侧下 p[0] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc)) + htmp); p[1] = new Point(picbox.Width - 20, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); p[2] = new Point(picbox.Width - 20, picbox.Height - 20); p[3] = new Point((picbox.Width - 5) / 2, picbox.Height - 20+htmp); g.FillPolygon(rightdown, p); //内侧两个矩形 上 p[0] = new Point(20, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); p[1] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc)) - htmp); p[2] = new Point(picbox.Width - 20,20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); p[3] = new Point((picbox.Width - 5) / 2, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))+htmp); g.FillPolygon(ns, p); //内矩形 下 p[0] = new Point(20, picbox.Height - 20); p[1] = new Point((picbox.Width - 5) / 2, picbox.Height - 20-htmp); p[2] = new Point(picbox.Width - 20, picbox.Height - 20); p[3] = new Point((picbox.Width - 5) / 2, picbox.Height - 20 + htmp); g.FillPolygon(nx, p); //再来3条线 g.DrawLine(penline, (picbox.Width - 5) / 2, 20 + htmp, (picbox.Width - 5) / 2, picbox.Height - 20 + htmp); g.DrawLine(penline, 20, 20, (picbox.Width - 5) / 2, 20 + htmp); g.DrawLine(penline, (picbox.Width - 5) / 2, 20 + htmp, picbox.Width - 20, 20); //最后再来一个标注 g.DrawString((sc * 100).ToString() + "%", new Font("宋体", 9), sb, picbox.Width - 20, 20 + Convert.ToInt32((picbox.Height - 20 - 20) * (1 - sc))); picbox.Image = mybitmap; }
|